//package com.tfswx.jcyw.dmzc.component
//
//import com.intellij.openapi.ui.DialogWrapper
//import com.tfswx.jcyw.dmzc.config.CommonData
//import java.awt.Color
//import java.awt.Graphics2D
//import java.awt.event.ActionEvent
//import java.awt.event.MouseAdapter
//import java.awt.event.MouseEvent
//import java.awt.event.MouseMotionListener
//import java.awt.image.BufferedImage
//import java.io.ByteArrayOutputStream
//import java.io.IOException
//import javax.imageio.ImageIO
//import javax.swing.*
//import javax.swing.event.ChangeEvent
//
///**
// * @author ricky
// * @date 2022/11/30
// */
//class Tp(private val imageBytes: ByteArray) : DialogWrapper(false) {
//    private var doodleRadioButton: JRadioButton? = null
//    private var lineRadioButton: JRadioButton? = null
//    private var circleRadioButton: JRadioButton? = null
//    private var rectRadioButton: JRadioButton? = null
//    private var imageLabel: JLabel? = null
//
//    //记录鼠标坐标
//    private var x = 0
//    private var y = 0
//    private fun initUI() {
//        doodleRadioButton = JRadioButton("涂鸦")
//        lineRadioButton = JRadioButton("画线")
//        circleRadioButton = JRadioButton("画圆")
//        rectRadioButton = JRadioButton("矩形")
//
//        rectRadioButton!!.isSelected = true
//        val tp = ImageIcon(imageBytes)
//        imageLabel = JLabel(tp)
//    }
//
//    var isDoodle = false
//    var isLine = false
//    var isCircle = false
//    var isRect = true
//    var bi: BufferedImage? = null
//
//    init {
//        initUI()
//        createAction()
//        setSize(800, 600)
//        this.title = "截图小工具"
//        init()
//    }
//
//    private fun createAction() {
//        doodleRadioButton!!.addChangeListener { changeEvent: ChangeEvent? ->
//            isDoodle = doodleRadioButton!!.isSelected
//            if (isDoodle) {
//                lineRadioButton!!.isSelected = false
//                circleRadioButton!!.isSelected = false
//                rectRadioButton!!.isSelected = false
//            }
//        }
//        lineRadioButton!!.addChangeListener { changeEvent: ChangeEvent? ->
//            isLine = lineRadioButton!!.isSelected
//            if (isLine) {
//                doodleRadioButton!!.isSelected = false
//                circleRadioButton!!.isSelected = false
//                rectRadioButton!!.isSelected = false
//            }
//        }
//        circleRadioButton!!.addChangeListener { changeEvent: ChangeEvent? ->
//            isCircle = circleRadioButton!!.isSelected
//            if (isCircle) {
//                lineRadioButton!!.isSelected = false
//                doodleRadioButton!!.isSelected = false
//                rectRadioButton!!.isSelected = false
//            }
//        }
//        rectRadioButton!!.addChangeListener { changeEvent: ChangeEvent? ->
//            isRect = rectRadioButton!!.isSelected
//            if (isRect) {
//                lineRadioButton!!.isSelected = false
//                doodleRadioButton!!.isSelected = false
//                circleRadioButton!!.isSelected = false
//            }
//        }
//        imageLabel!!.addMouseListener(object : MouseAdapter() {
//            override fun mousePressed(e: MouseEvent) {
//                //鼠标按下的点，作为画线的最初的起点
//                x = e.x
//                y = e.y
//            }
//
//            override fun mouseReleased(e: MouseEvent) {
//                if (isLine || isCircle||isRect) {
//                    //该方法只用作画线时处理
//                    //鼠标弹起时需要将最后定为的图像 bi，调用imageLabel.setIcon()方法，设置进去。
//                    //这样就可以将线段真的画进去了。为了使用变量 bi 将其转为 该类的private变量
//                    imageLabel!!.icon = ImageIcon(bi)
//                }
//            }
//        })
//        imageLabel!!.addMouseMotionListener(object : MouseMotionListener {
//            override fun mouseDragged(e: MouseEvent) {
//                val xEnd = e.x
//                val yEnd = e.y
//                if (isDoodle) {    //涂鸦开关
//
//                    //鼠标移动时，在imageLabel展示的图像中，绘制点
//                    //1. 取得imageLabel中的图像
//                    val img = (imageLabel!!.icon as ImageIcon).image
//
//                    //2. 创建一个缓冲图形对象 bi
//                    bi = BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB)
//                    val g2d = bi!!.graphics as Graphics2D
//
//                    //3. 将截图的原始图像画到 bi
//                    g2d.drawImage(img, 0, 0, null)
//
//                    //4. 在鼠标所在的点，画一个点
//                    g2d.color = Color.RED //设置画笔颜色为红色
//                    g2d.drawLine(x, y, xEnd, yEnd) //Java中没有提供点的绘制，使用起点和终点为同一个点的画线代替
//                    g2d.dispose()
//
//                    //5. 为了保留每一个点，不能直接使用imageLabel.getGraphics()来画，
//                    //需要使用imageLabel.setIcon()来直接将画了点的图像，设置到imageLabel中，
//                    //这样，在第一步中，取得img时，就为已经划过上一个点的图像了。
//                    imageLabel!!.icon = ImageIcon(bi)
//
//                    //下次画线起点是设置为这次画线的终点
//                    x = xEnd
//                    y = yEnd
//                }
//                if (isLine) {    //画线开关
//
//                    //鼠标移动时，在imageLabel展示的图像中，绘制点
//                    //1. 取得imageLabel中的图像
//                    val img = (imageLabel!!.icon as ImageIcon).image
//
//                    //2. 创建一个缓冲图形对象 bi
//                    bi = BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB)
//                    val g2d = bi!!.graphics as Graphics2D
//
//                    //3. 将截图的原始图像画到 bi
//                    g2d.drawImage(img, 0, 0, null)
//
//                    //4. 在鼠标所在的点，画一个点
//                    g2d.color = Color.RED //设置画笔颜色为红色
//                    g2d.drawLine(x, y, xEnd, yEnd) //Java中没有提供点的绘制，使用起点和终点为同一个点的画线代替
//                    g2d.dispose()
//
//                    //5. 不需要保留在鼠标拖动过程中所画的线段，所以直接使用imageLabel.getGraphics()绘制
//                    //这样imageLabel.getIcon()并没有被改变，所以每次都只到原始截图和多了一条线，即为最后效果的演示
//                    val g = imageLabel!!.graphics
//                    g.drawImage(bi, 0, 0, null) //将处理后的图片，画到imageLabel
//                    g.dispose()
//                }
//                if (isCircle) {
//
//                    //鼠标移动时，在imageLabel展示的图像中，绘制点
//                    //1. 取得imageLabel中的图像
//                    val img = (imageLabel!!.icon as ImageIcon).image
//
//                    //2. 创建一个缓冲图形对象 bi
//                    bi = BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB)
//                    val g2d = bi!!.graphics as Graphics2D
//
//                    //3. 将截图的原始图像画到 bi
//                    g2d.drawImage(img, 0, 0, null)
//
//                    //4. 在鼠标所在的点，画一个点
//                    g2d.color = Color.RED //设置画笔颜色为红色
//                    //因为如果鼠标向上，或向左移动时，xEnd > x, yEnd > y ，所以画圆的起点要取两者中的较小的，
//                    //而宽度和高度是不能  < 0 的，所以取绝对值
//                    g2d.drawOval(Math.min(x, xEnd), Math.min(y, yEnd), Math.abs(xEnd - x), Math.abs(yEnd - y))
//                    g2d.dispose()
//
//                    //5. 不需要保留在鼠标拖动过程中所画的线段，所以直接使用imageLabel.getGraphics()绘制
//                    //这样imageLabel.getIcon()并没有被改变，所以每次都只到原始截图和多了一条线，即为最后效果的演示
//                    val g = imageLabel!!.graphics
//                    g.drawImage(bi, 0, 0, null) //将处理后的图片，画到imageLabel
//                    g.dispose()
//                }
//                if (isRect) {
//
//                    //鼠标移动时，在imageLabel展示的图像中，绘制点
//                    //1. 取得imageLabel中的图像
//                    val img = (imageLabel!!.icon as ImageIcon).image
//
//                    //2. 创建一个缓冲图形对象 bi
//                    bi = BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB)
//                    val g2d = bi!!.graphics as Graphics2D
//
//                    //3. 将截图的原始图像画到 bi
//                    g2d.drawImage(img, 0, 0, null)
//
//                    //4. 在鼠标所在的点，画一个点
//                    g2d.color = Color.RED //设置画笔颜色为红色
//                    //因为如果鼠标向上，或向左移动时，xEnd > x, yEnd > y ，所以画圆的起点要取两者中的较小的，
//                    //而宽度和高度是不能  < 0 的，所以取绝对值
//                    g2d.drawRect(Math.min(x, xEnd), Math.min(y, yEnd), Math.abs(xEnd - x), Math.abs(yEnd - y))
//                    g2d.dispose()
//
//                    //5. 不需要保留在鼠标拖动过程中所画的线段，所以直接使用imageLabel.getGraphics()绘制
//                    //这样imageLabel.getIcon()并没有被改变，所以每次都只到原始截图和多了一条线，即为最后效果的演示
//                    val g = imageLabel!!.graphics
//                    g.drawImage(bi, 0, 0, null) //将处理后的图片，画到imageLabel
//                    g.dispose()
//                }
//            }
//
//            override fun mouseMoved(e: MouseEvent) {}
//        })
//    }
//
//    override fun createCenterPanel(): JComponent {
//        val pane = JPanel()
//        pane.add(imageLabel)
//        val imgScrollPane = JScrollPane(pane)
//        imgScrollPane.border = BorderFactory.createEmptyBorder()
//        imgScrollPane.verticalScrollBar.unitIncrement = 16
//        val j = JPanel()
//        val layout = GroupLayout(j)
//        layout.autoCreateContainerGaps = true
//        layout.autoCreateGaps = true
//
//
//        /*
//         *水平组（仅确定 X 轴方向的坐标/排列方式）
//         */
//        // 左右
//        val hParalGp01 = layout.createSequentialGroup()
//                .addComponent(doodleRadioButton)
//                .addComponent(lineRadioButton)
//                .addComponent(circleRadioButton)
//                .addComponent(rectRadioButton)
//
//        // 上下
//        val hParalGroup = layout.createParallelGroup()
//                .addGroup(hParalGp01)
//                .addComponent(imgScrollPane)
//
//        // 指定布局的 水平组（水平坐标）
//        layout.setHorizontalGroup(hParalGroup)
//
//        /*
//         *垂直组（仅确定 Y 轴方向的坐标/排列方式）
//         */
//        // 左右
//        val vParalGroup01 = layout.createParallelGroup()
//                .addComponent(doodleRadioButton)
//                .addComponent(lineRadioButton)
//                .addComponent(circleRadioButton)
//                .addComponent(rectRadioButton)
//        // 上下
//        val vSeqGroup = layout.createSequentialGroup()
//                .addGroup(vParalGroup01)
//                .addComponent(imgScrollPane)
//
//        // 指定布局的 垂直组（垂直坐标）
//        layout.setVerticalGroup(vSeqGroup)
//        j.layout = layout
//        return j
//    }
//
//    override fun createActions(): Array<Action> {
//        val okAction: Action = object : AbstractAction("完成编辑") {
//            override fun actionPerformed(actionEvent: ActionEvent) {
//                try {
//                    val img = (imageLabel!!.icon as ImageIcon).image as BufferedImage
//                    val os = ByteArrayOutputStream()
//                    ImageIO.write(img, "jpg", os)
//                    CommonData.imageByte = os.toByteArray()
//                    close(OK_EXIT_CODE)
//                } catch (ex: IOException) {
//                    throw RuntimeException(ex)
//                }
//            }
//        }
//        return arrayOf(okAction)
//    }
//}